package gases.as3.librarys.core.net.cpp.bytes
{
	import flash.utils.ByteArray;
	
	public class BytesDeocdeVOUtils
	{
		public function BytesDeocdeVOUtils()
		{
		}
		
		/**
		 * 好友搜索返回
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function relationResults(bytes:ByteArray):Object
		{
			var vo:Object = new Object();
			vo["dwOnlyId"] = BytesUtil.read("dwOnlyId", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["btSex"] = BytesUtil.read("btSex", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["dwLevel"] = BytesUtil.read("dwLevel", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["szClanName"] = BytesUtil.read("szClanName", bytes, BytesType.CHAR,12);
			vo["szPrinceName"] = BytesUtil.read("szPrinceName", bytes, BytesType.BYTE, 12);
			vo["szSignature"] = BytesUtil.read("szSignature", bytes, BytesType.BYTE, 20);
			return vo;
		}
		
		/**
		 * 师徒 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function MasterPrenticeInfo(bytes:ByteArray):Object
		{
			var vo:Object = new Object();
			vo["type"] = BytesUtil.read("type", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["name"] = BytesUtil.read("name", bytes, BytesType.CHAR, 48);
			vo["dwOnlyId"] = BytesUtil.read("dwOnlyId", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["level"] = BytesUtil.read("level", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["mapId"] = BytesUtil.read("mapId", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["moral"] = BytesUtil.read("moral", bytes, BytesType.INT, BytesType.INT_LENGTH);
			
			return vo;
		}
		
		/**
		 * 人物社会关系信息解析 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function relationInfomationDecode(bytes:ByteArray):Object
		{
			var vo:Object = new Object();
			vo["btSetSex"] = BytesUtil.read("btSetSex", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["btAge"] = BytesUtil.read("btAge", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["btNation"] = BytesUtil.read("btNation", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["btProvince"] = BytesUtil.read("btProvince", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["btCity"] = BytesUtil.read("btCity", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["szSignature"] = BytesUtil.read("szSignature", bytes, BytesType.CHAR, 100);
			vo["wBirthYear"] = BytesUtil.read("wBirthYear", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["bBirthMonth"] = BytesUtil.read("bBirthMonth", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["bBirthDay"] = BytesUtil.read("bBirthDay", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["bZodiac"] = BytesUtil.read("bZodiac", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["bConstellation"] = BytesUtil.read("bConstellation", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["btBloodType"] = BytesUtil.read("btBloodType", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			
			vo["szCellPhone"] = BytesUtil.read("szCellPhone", bytes, BytesType.CHAR, 30);
			vo["szQQ"] = BytesUtil.read("szQQ", bytes, BytesType.CHAR, 30);
			vo["szPhone"] = BytesUtil.read("szPhone", bytes, BytesType.CHAR, 30);
			vo["szMail"] = BytesUtil.read("szMail", bytes, BytesType.CHAR, 30);
			vo["szProfession"] = BytesUtil.read("szProfession", bytes, BytesType.CHAR, 30);
			vo["szSchool"] = BytesUtil.read("szSchool", bytes, BytesType.CHAR, 30);
			
			vo["btSecurity"] = BytesUtil.read("btSecurity", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			
			return vo;
		}
		
		/**
		 * 人物信息列表 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function relationInfoDecode(bytes:ByteArray):Object
		{
			var vo:Object = new Object();
			vo["szName"] = BytesUtil.read("szName", bytes, BytesType.CHAR, 48);
			vo["dwOnlyId"] = BytesUtil.read("dwOnlyId", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwJob"] = BytesUtil.read("dwJob", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["btSex"] = BytesUtil.read("btSex", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["btState"] = BytesUtil.read("btState", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["dwRelationDegree"] = BytesUtil.read("dwRelationDegree", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwShareExp"] = BytesUtil.read("dwShareExp", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwShareGold"] = BytesUtil.read("dwShareGold", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwOnlineLvl"] = BytesUtil.read("dwOnlineLvl", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwFlowerNum"] = BytesUtil.read("dwFlowerNum", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwLevel"] = BytesUtil.read("dwLevel", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["btAutoSendFlower"] = BytesUtil.read("btAutoSendFlower", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			
			return vo;
		}
		
		/**
		 * 坐标解析 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function cretLocationDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["mapid"] = BytesUtil.read("mapid", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["ncurx"] = BytesUtil.read("ncurx", bytes, BytesType.SHORT, BytesType.SHORT_LENGTH);
			vo["ncury"] = BytesUtil.read("ncury", bytes, BytesType.SHORT, BytesType.SHORT_LENGTH);
			vo["ncurz"] = BytesUtil.read("ncurz", bytes, BytesType.SHORT, BytesType.SHORT_LENGTH);
			return vo;
		} 
		
		/**
		 * 人物属性解析 
		 * @param byte
		 * @return 
		 * 
		 */		
		public static function cretFeatureDecode(byte:ByteArray):Object
		{
			var vo:Object = {};
			
			vo["btTargetState"] 	= BytesUtil.read("btTargetState", byte, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["btCretType"] 		= BytesUtil.read("btCretType", byte, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["queststate"] 		= BytesUtil.read("queststate", byte, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["isfight"] 			= BytesUtil.read("isfight", byte, BytesType.BYTE ,BytesType.BYTE_LENGTH);
			vo["countryid"] 		= BytesUtil.read("countryid", byte, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["namecolorstate"]  = BytesUtil.read("namecolorstate", byte, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["dwCretTypeId"] 	= BytesUtil.read("dwCretTypeId", byte, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwMonsterFeatureId"] = BytesUtil.read("dwMonsterFeatureId", byte, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwGroupId"] 			= BytesUtil.read("dwGroupId", byte, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwGroupMasterTmpId"] = BytesUtil.read("dwGroupMasterTmpId", byte, BytesType.INT, BytesType.INT_LENGTH);
			vo["isFollowMaster"] 		= BytesUtil.read("isFollowMaster", byte, BytesType.BOOL,BytesType.BOOL_LENGTH);
			vo["dwFlyItemId"] 			= BytesUtil.read("dwFlyItemId", byte, BytesType.INT,BytesType.INT_LENGTH);
			vo["dwClanId"] 			= BytesUtil.read("dwClanId", byte, BytesType.INT,BytesType.INT_LENGTH);
			vo["boClanMaster"] 		= BytesUtil.read("boClanMaster", byte, BytesType.BOOL,BytesType.BOOL_LENGTH);
			vo["dwPrincesId"] 			= BytesUtil.read("dwPrincesId", byte, BytesType.INT,BytesType.INT_LENGTH);
			vo["boPrincesMaster"] 	= BytesUtil.read("boPrincesMaster", byte, BytesType.BOOL, BytesType.BOOL_LENGTH);
			vo["btIsBoss"] 			= BytesUtil.read("btIsBoss", byte, BytesType.BYTE,BytesType.BYTE_LENGTH);
			vo["wNowKilling"] 			= BytesUtil.read("wNowKilling", byte, BytesType.SHORT, BytesType.SHORT_LENGTH);
			vo["movespeed"] 			= BytesUtil.read("movespeed", byte, BytesType.BYTE,BytesType.BYTE_LENGTH);
			vo["nAttackSound"] 		= BytesUtil.read("nAttackSound", byte, BytesType.INT,BytesType.INT_LENGTH);
			vo["nAttackedSound"]		= BytesUtil.read("nAttackedSound", byte, BytesType.INT,BytesType.INT_LENGTH);
			
			vo["Feature"] 				= BytesUtil.readVO("Feature",byte,simpleFeatureDecode);
			vo["boIsPitch"]            = BytesUtil.read("boIsPitch", byte, BytesType.BYTE,BytesType.BYTE_LENGTH);
			vo["pitchName"]            = BytesUtil.read("pitchName", byte, BytesType.CHAR,48);
			vo["dwOnlyID"]			     = BytesUtil.read("dwOnlyID", byte, BytesType.INT,BytesType.INT_LENGTH);
			vo["szPlayerTitleName"] = BytesUtil.read("szPlayerTitleName", byte, BytesType.CHAR ,48);
			vo["nTitleIconID"]  = BytesUtil.read("nTitleIconID" ,byte, BytesType.INT ,BytesType.INT_LENGTH);
			vo["szClanName"]     = BytesUtil.read("szClanName" ,byte, BytesType.CHAR ,12);
			vo["dwRaceFame"]     = BytesUtil.read("dwRaceFame" ,byte, BytesType.INT ,BytesType.INT_LENGTH);
			vo["dwMoral"]     = BytesUtil.read("dwMoral" ,byte, BytesType.INT ,BytesType.INT_LENGTH);
			
			return vo;
		}
		
		/**
		 * 人物形象解析 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function simpleFeatureDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["sex"] 		= BytesUtil.read("sex", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["job"] 		= BytesUtil.read("job", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["hair"] 		= BytesUtil.read("hair", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["dwFacdid"] = BytesUtil.read("dwFacdid", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["weapon"] 	= BytesUtil.read("weapon", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dress"] 	= BytesUtil.read("dress", bytes, BytesType.INT, BytesType.INT_LENGTH);
			return vo;
		}
		
		/**
		 * 选择人物解析 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function selectAvatarInfoDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["szName"] 		= BytesUtil.read('szName', bytes, BytesType.CHAR, 48);
			vo["nlevel"] 		= BytesUtil.read('nlevel', bytes,  BytesType.INT, BytesType.INT_LENGTH);
			vo["mapid"] 		= BytesUtil.read('mapid', bytes,  BytesType.INT, BytesType.INT_LENGTH);
			vo["countryId"] 	= BytesUtil.read('countryId', bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);	
			vo["ngmlvl"] 		= BytesUtil.read('ngmlvl', bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			
			vo["Feature"] 		= BytesUtil.readVO("Feature", bytes, simpleFeatureDecode);
			vo["dwUserOnlyId"] =  BytesUtil.read("dwUserOnlyId", bytes, BytesType.INT,  BytesType.INT_LENGTH);
			vo["btisdel"] 		= BytesUtil.read('btisdel', bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);	 
			vo["posdeltime"] 	= BytesUtil.read('posdeltime',  bytes, BytesType.INT, BytesType.INT_LENGTH);	 
			vo["lastlogintime"] 	= BytesUtil.read('lastlogintime',  bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["remaindeltime"] 	= BytesUtil.read('remaindeltime',  bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["lastloginip"] 		= BytesUtil.read('lastloginip', bytes, BytesType.BYTES, 4);
			return vo;
		}
		
		/**
		 * 人物加点返回属性解析
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function playerAbilityDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["dwMaxHP"] 		 = BytesUtil.read("dwMaxHP", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwMaxMP"] 		 = BytesUtil.read("dwMaxMP", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwRoundAddHP"] = BytesUtil.read("dwRoundAddHP", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwRoundAddMP"] = BytesUtil.read("dwRoundAddMP", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nDC"] 			 = BytesUtil.read("nDC", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nMC"] 			 = BytesUtil.read("nMC", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nAC"] 			 = BytesUtil.read("nAC", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nMAC"] 			 = BytesUtil.read("nMAC", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nFirstAttack"] = BytesUtil.read("nFirstAttack", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nBackHit"] 	 = BytesUtil.read("nBackHit", bytes, BytesType.INT,BytesType.INT_LENGTH);
			vo["nNicety"] 	 	 = BytesUtil.read("nNicety", bytes, BytesType.INT,BytesType.INT_LENGTH);
			vo["nJuck"]         = BytesUtil.read("nJuck",bytes,BytesType.INT,BytesType.INT_LENGTH);
			vo["nBigHit"] 		 = BytesUtil.read("nBigHit", bytes, BytesType.INT,  BytesType.INT_LENGTH);
			vo["nAntiBigHit"]  = BytesUtil.read("nAntiBigHit", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nCachet"] =  BytesUtil.read("nCachet", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nAntiCachet"]  = BytesUtil.read("nAntiCachet", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nEscapeRating"] =  BytesUtil.read("nEscapeRating", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nCatchRating"] =  BytesUtil.read("nCatchRating", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nElementAttackRating"]  = BytesUtil.read("nElementAttackRating", bytes,  BytesType.INT, BytesType.INT_LENGTH);
			vo["nElementDefenceRating"] = BytesUtil.read("nElementDefenceRating", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nElementHpRating"] 	   = BytesUtil.read("nElementHpRating", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nElementNicetyRating"]  = BytesUtil.read("nElementNicetyRating", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nElementJuckRating"]    = BytesUtil.read("nElementJuckRating", bytes, BytesType.INT, BytesType.INT_LENGTH);
			return vo;
		}
		
		/**
		 * 人物登录信息解析
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function svrLoginInfoDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["gametype"] =  BytesUtil.read('szName', bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["zoneid"] =  BytesUtil.read('zoneid', bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["szNodeName"] =  BytesUtil.read('szNodeName', bytes, BytesType.CHAR, 48);
			vo["lastlogintime"] =  BytesUtil.read('lastlogintime', bytes, BytesType.INT, BytesType.INT_LENGTH);
			return vo;
		}
		
		/**
		 * 道具装备解析 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function itemsDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			
			//TODO: 用INT64UTIL来模拟一个STRING 当作INT64
			vo["i64ItemID"] 			= BytesUtil.read("i64ItemID", bytes, BytesType.INT64, BytesType.INT64_LENGTH);
			vo["dwBaseID"] 			= BytesUtil.read("dwBaseID", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["Location"]				= itemLocationDecode(bytes);
			vo["boIdent"] 				= BytesUtil.read("boIdent",  bytes, BytesType.BOOL, BytesType.BOOL_LENGTH);
			vo["nDura"] 				= BytesUtil.read("nDura", bytes,  BytesType.INT, BytesType.INT_LENGTH);
			vo["dwSoulIdx"] 			= BytesUtil.read("dwSoulIdx",  bytes, BytesType.INT,BytesType.INT_LENGTH);
			vo["btSoulToneUpIdx"] 	= BytesUtil.read("btSoulToneUpIdx",  bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
//			vo["btSoulActiveType"] 	= BytesUtil.read("btSoulActiveType", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			
			var soulUp:Array = new Array();
			for(var sou:int = 0; sou < 2; sou++)
			{
				soulUp[sou] = stSoulUpDecode(bytes);
			}
			vo["_stSoulUp"] = soulUp;
			
//				||btItemLvl||BYTE||1||||武器品阶 0普通 1强化 2黄级 3玄 4地级 5天级||  
			vo["btItemLvl"]			= BytesUtil.read("btItemLvl",bytes,BytesType.BYTE,BytesType.BYTE_LENGTH);
//				14 ||stSoul||[wiki:common/CommonStruct/stSoul stSoul]||5*2||||灵遂属性||  
			vo["stSoul"]				= stSoulDecode(bytes);
			
			//乾坤5属性
			var universePropertyArr:Array=[];
			for(var up:uint=0;up<6;up++)
			{
				universePropertyArr[up]= universeDecode(bytes);
			}
			vo["xUniverseProperty"] 	= universePropertyArr;
			
			vo["btFiveElementIdx"] 	= BytesUtil.read("btFiveElementIdx",  bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["btLockByPet"] 			= BytesUtil.read("btLockByPet",  bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["btUniverseCount"] 	= BytesUtil.read("btUniverseCount",  bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			//凹槽
			vo["nHoleCount"] 			= BytesUtil.read("nHoleCount", bytes,  BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["dwHoleItemIdx0"] 		= BytesUtil.read("dwHoleItemIdx0",  bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwHoleItemIdx1"] 		= BytesUtil.read("dwHoleItemIdx1",  bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwHoleItemIdx2"] 		= BytesUtil.read("dwHoleItemIdx2",  bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwHoleItemIdx3"] 		= BytesUtil.read("dwHoleItemIdx3",  bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwHoleItemIdx4"] 		= BytesUtil.read("dwHoleItemIdx4",  bytes, BytesType.INT, BytesType.INT_LENGTH);
			//物品携带技能id，16个技能
			var skillIdxArr:Array=[];
			for(var i:uint=0;i<16;i++)
			{
				skillIdxArr[i]=BytesUtil.read("nSkillIdx", bytes, BytesType.INT, BytesType.INT_LENGTH)
			}
			vo["nSkillIdx"] 			= skillIdxArr;
			vo["dwCount"] 				= BytesUtil.read("dwCount",  bytes, BytesType.INT, BytesType.INT_LENGTH);
			//绑定信息 0x01 普通绑定 0x02认主
			vo["btBinding"] 			= BytesUtil.read("btBinding",  bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			var luaDataArr:Array=[];
			for(var m:uint=0;m<8;m++)
			{
				luaDataArr[m] = BytesUtil.read("dwLuaData",  bytes, BytesType.INT,BytesType.INT_LENGTH);
			}
			vo["dwLuaData"] 			= luaDataArr;
			
			vo["szMaker"] 				= BytesUtil.read("szMaker",  bytes, BytesType.CHAR, 48);

			vo["btQuality"] 			= BytesUtil.read("btQuality", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["dwSaveExpBall"]			= BytesUtil.read("dwSaveExpBall", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["petData"] 				= petDataDecode(bytes);
			vo["petAbility"] 			= petAbilityDecode(bytes);
			
			return vo;
		}
		
		public static function stSoulUpDecode(bytes:ByteArray):Object
		{
			var vo:Object = new Object();
			vo["btSType"] 			= BytesUtil.read("btSType", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["dwSNum"]			= BytesUtil.read("dwSNum", bytes, BytesType.INT, BytesType.INT_LENGTH);
			return vo;
		}
		
		public static function stSoulDecode(bytes:ByteArray):Array
		{
			var arr:Array = [];
			for(var i:int= 0; i< 2; i++)
			{
				var vo:Object = new Object();
				vo.btSType = BytesUtil.read("btSType", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
				vo.dwSNum = BytesUtil.read("dwSNum", bytes, BytesType.INT, BytesType.INT_LENGTH);
				arr.push(vo);
			}
			return arr;
		}
		
		
		/**
		 * 解析道具所在格子位置 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function itemLocationDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["btLocation"] = BytesUtil.read("btLocation",  bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["btTableID"]  = BytesUtil.read("btTableID",  bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["btIndex"] 	  = BytesUtil.read("btIndex",  bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			return vo;
		}
		
		/**
		 * 乾坤类型具体类型 
		 * @return 
		 * 
		 */		
		public static function universeDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["btUType"] = BytesUtil.read("btUType", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["dwUNum"]  = BytesUtil.read("dwUNum", bytes, BytesType.INT, BytesType.INT_LENGTH);
			return vo;
		}
		
		/**
		 * 战将属性 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function petAbilityDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["dwMaxHP"] 		 = BytesUtil.read("dwMaxHP", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwMaxMP"] 		 = BytesUtil.read("dwMaxMP", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwRoundAddHP"] = BytesUtil.read("dwRoundAddHP", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwRoundAddMP"] = BytesUtil.read("dwRoundAddMP", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nDC"] 			 = BytesUtil.read("nDC", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nMC"] 			 = BytesUtil.read("nMC", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nAC"] 			 = BytesUtil.read("nAC", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nMAC"] 			 = BytesUtil.read("nMAC", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nFirstAttack"] = BytesUtil.read("nFirstAttack", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nBackHit"] 	 = BytesUtil.read("nBackHit", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nNicety"] 	 	 = BytesUtil.read("nNicety", bytes, BytesType.INT,  BytesType.INT_LENGTH);
			vo["nJuck"]			 = BytesUtil.read("nJuck", bytes, BytesType.INT,  BytesType.INT_LENGTH);
			vo["nBigHit"] 		 = BytesUtil.read("nBigHit", bytes, BytesType.INT,  BytesType.INT_LENGTH);
			vo["nAntiBigHit"]  = BytesUtil.read("nAntiBigHit", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nCachet"] =  BytesUtil.read("nCachet", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nAntiCachet"]  = BytesUtil.read("nAntiCachet", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nEscapeRating"] =  BytesUtil.read("nEscapeRating", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nCatchRating"]  = BytesUtil.read("nCatchRating", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nElementAttackRating"]  = BytesUtil.read("nElementAttackRating", bytes,  BytesType.INT, BytesType.INT_LENGTH);
			vo["nElementDefenceRating"] = BytesUtil.read("nElementDefenceRating", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nElementHpRating"] 	   = BytesUtil.read("nElementHpRating", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nElementNicetyRating"]  = BytesUtil.read("nElementNicetyRating", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nElementJuckRating"]    = BytesUtil.read("nElementJuckRating", bytes, BytesType.INT, BytesType.INT_LENGTH);
			return vo;
		}
		
		/**
		 * 战将数据解析
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function petDataDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["i64TempId"] 		 = BytesUtil.read("i64TempId", bytes, BytesType.INT64, BytesType.INT64_LENGTH);
			vo["i64NowExp"] 		 = BytesUtil.read("i64NowExp", bytes, BytesType.INT64_NUMBER, BytesType.INT64_NUMBER_LENGTH);
			vo["i64OwnerItemId"] 	 = BytesUtil.read("i64OwnerItemId", bytes, BytesType.INT64, BytesType.INT64_LENGTH);
			vo["monsterid"] 		 = BytesUtil.read("monsterid", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["warIndex"] 		 = BytesUtil.read("warIndex", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["nowHP"] 		 	 = BytesUtil.read("nowHP", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nowMP"] 			 = BytesUtil.read("nowMP", bytes, BytesType.INT, BytesType.INT_LENGTH);
			//寿命
			vo["dwHrs"] 		 	 = BytesUtil.read("dwHrs", bytes, BytesType.INT, BytesType.INT_LENGTH);
			//排名
			vo["wRank"] 		 	 = BytesUtil.read("wRank", bytes, BytesType.SHORT, BytesType.SHORT_LENGTH);
			vo["petprice"] 		 = BytesUtil.read("petprice", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwSkillIdx"] 		 = BytesUtil.read("dwSkillIdx", bytes, BytesType.INT, BytesType.INT_LENGTH);
			//存储位置   (0身上，1仓库)
			vo["dwSavePos"] 		 		 = BytesUtil.read("dwSavePos", bytes, BytesType.INT, BytesType.INT_LENGTH);
			//TODO: 技能宠物 14字节长度* 16个 不知道还有用没
			var sAry:Array = [];
			for(var i:int = 0; i< 16; i++)
			{
				var o:Object = petSkillInfoDecode(bytes);
				sAry.push(o);
			}
			vo["skills"] 		 	 = sAry;
			
			vo["szName"] 		 	 = BytesUtil.read("szName", bytes, BytesType.CHAR,48);
			vo["abilityBase"] 		 = monsterAbilityBaseDecode(bytes);
			return vo;
		}
		
		/**
		 * 资质解析
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function monsterAbilityBaseDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			
			vo["wlevel"] 		 		 	 = BytesUtil.read("wlevel", bytes, BytesType.SHORT, BytesType.SHORT_LENGTH);
			vo["abilitypoint"] 		 	 = abilityPointDecode(bytes);
			
			vo["btLoyalty"] 			 	 = BytesUtil.read("btLoyalty", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["btSavvy"] 		 	 	 	 = BytesUtil.read("btSavvy", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["nQualityofHP"] 		 	 = BytesUtil.read("nQualityofHP", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nQualityofMP"] 	 	 	 = BytesUtil.read("nQualityofMP", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nQualityofHit"] 		 	 = BytesUtil.read("nQualityofHit", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nQualityofSkillHit"] 		 = BytesUtil.read("nQualityofSkillHit", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nQualityofSente"] 		 = BytesUtil.read("nQualityofSente", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nQualityofDef"] 		 	 = BytesUtil.read("nQualityofDef", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nQualityofSkillDef"] 		 = BytesUtil.read("nQualityofSkillDef", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nQualityofBackHit"] 		 = BytesUtil.read("nQualityofBackHit", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nQualityofHitRatio"] 		 = BytesUtil.read("nQualityofHitRatio", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nQualityofBigHit"] 		 = BytesUtil.read("nQualityofBigHit", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nQualityofJouk"] 		 	 = BytesUtil.read("nQualityofJouk", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nQualityofJoukBigRatio"]  = BytesUtil.read("nQualityofJoukBigRatio", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nQualityofAntiCachet"] 	 = BytesUtil.read("nQualityofAntiCachet", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nRateofGrowth"] 		 	 = BytesUtil.read("nRateofGrowth", bytes, BytesType.INT, BytesType.INT_LENGTH);
			
			return vo;
		}
		
		/**
		 * 加点属性解析 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function abilityPointDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			var ary:Array = [];
			for(var i:int = 0; i< 5; i++)
			{
				ary[i] = BytesUtil.read("wAddAbilityPoint", bytes, BytesType.SHORT, BytesType.SHORT_LENGTH)
			}
			vo["wAddAbilityPoint"] 	= ary;
			vo["wRemainPoint"] 	 	= BytesUtil.read("wRemainPoint", bytes, BytesType.SHORT, BytesType.SHORT_LENGTH);
			return vo;
		}
		
		/**
		 * 宠物技能信息 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function petSkillInfoDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["skills"] 	= skillLvlDecode(bytes);
			vo["btbind"] 	= BytesUtil.read("btbind", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["BindingSortNum"] = BytesUtil.read("btBindId", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			return vo;
		}
		
		/**
		 * 技能设定 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function skillLvlDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["skillid"] 	= BytesUtil.read("skillid", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["level"] 	= BytesUtil.read("level", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwexp"] 	= BytesUtil.read("dwexp", bytes, BytesType.INT, BytesType.INT_LENGTH);
			return vo;
		}
		
		/**
		 *生活技能信息 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function lifeSkillDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["dwBaseId"] 	= BytesUtil.read("dwBaseId", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nTrain"] 	= BytesUtil.read("nTrain", bytes, BytesType.INT, BytesType.INT_LENGTH);
			return vo;
		}
		
		/**
		 *宠物排名 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function petRankSimpleDataDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["nRank"] 	= BytesUtil.read("nRank", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nLastNum"] 	= BytesUtil.read("nLastNum", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["szPetTypeName"] 	= BytesUtil.read("szPetTypeName", bytes, BytesType.CHAR, 48);
			vo["szHostName"] 	= BytesUtil.read("szHostName", bytes, BytesType.CHAR, 48);
			vo["nBodyPrice"] 	= BytesUtil.read("nBodyPrice", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["i64TempID"] 	= BytesUtil.read("i64TempID", bytes, BytesType.INT64, BytesType.INT64_LENGTH);
			vo["btIsOnLine"] 	= BytesUtil.read("btIsOnLine", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			return vo;
		}
		
		/**
		 * 人物信息
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function playerInfoDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["dwLevel"] 	  = BytesUtil.read("dwLevel", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["btSex"] 	  = BytesUtil.read("btSex", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["btJob"] 	  = BytesUtil.read("btJob", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["szName"] 	  = BytesUtil.read("szName", bytes, BytesType.CHAR, 48);
			vo["szTitle"] 	  = BytesUtil.read("szTitle", bytes, BytesType.CHAR, 48);
			vo["szClanName"] 	    = BytesUtil.read("szClanName", bytes, BytesType.CHAR, 12);
			vo["dwRaceFame"] 	    = BytesUtil.read("dwRaceFame", bytes,BytesType.INT, BytesType.INT_LENGTH);
			vo["dwWarFame"] 	    = BytesUtil.read("dwWarFame", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwGold"] 	        = BytesUtil.read("dwGold", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nCountryid"]   	= BytesUtil.read("nCountryid", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nNowRankNum"]  	= BytesUtil.read("nNowRankNum", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nLastRankNum"] 	= BytesUtil.read("nLastRankNum", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["i64Exp"] 	        = BytesUtil.read("i64Exp", bytes, BytesType.INT64, BytesType.INT64_LENGTH);
			vo["nFlowerNum"] 	    = BytesUtil.read("nFlowerNum", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["nOnlineLevel"]    = BytesUtil.read("nOnlineLevel", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["btIsOnLine"] 	    = BytesUtil.read("btIsOnLine", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["dwAllProducSkillVal"] 	    = BytesUtil.read("dwAllProducSkillVal", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["dwPKSword"] 	    = BytesUtil.read("dwPKSword", bytes, BytesType.INT, BytesType.INT_LENGTH);
			return vo;
		}
		
		/**
		 * 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function fighCretInfoDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["team"]      	    = BytesUtil.read("team", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["pos"]       	    = BytesUtil.read("pos", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["curLifeState"] 	= BytesUtil.read("pos", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			vo["tmpid"] 	        = BytesUtil.read("tmpid", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["szShowName"]    	= BytesUtil.read("szShowName", bytes, BytesType.CHAR, 48);
			vo["feature"]         = cretFeatureDecode(bytes);
			return vo;
		}
		
		/**
		 * 广播所有对象的战斗物品
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function broadcastFightItem(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["dwItemID"]       = BytesUtil.read("dwItemID",bytes,BytesType.INT,BytesType.INT_LENGTH);
			vo["nID"]             = BytesUtil.read("nID",bytes,BytesType.INT,BytesType.INT_LENGTH);
			vo["szName"]         = BytesUtil.read("szName",bytes,BytesType.CHAR,48);
			return vo;
		}
		
		/**
		 * 广播所有玩家的所有魔法
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function broadcastFightMagicSkill(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["nID"]             = BytesUtil.read("nID",bytes,BytesType.INT,BytesType.INT_LENGTH);
			vo["dwSkillDrawing"]         = BytesUtil.read("dwSkillDrawing",bytes,BytesType.CHAR, 48 );
			return vo;
		}
		
		/**
		 * 广播玩家自己的所有魔法
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function broadcastSelfFightMagicSkill(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["btPage"]          = BytesUtil.read("btPage",bytes,BytesType.BYTE,BytesType.BYTE_LENGTH);
			vo["btIndex"]             = BytesUtil.read("btIndex",bytes,BytesType.BYTE,BytesType.BYTE_LENGTH);
			vo["dwMagicID"]         = BytesUtil.read("dwMagicID",bytes,BytesType.INT, BytesType.INT_LENGTH );
			return vo;
		}
		
		/**
		 * 商城物品 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function stMallItemConfigDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["dwItemid"] = BytesUtil.read("dwItemid",bytes,BytesType.INT,BytesType.INT_LENGTH);
			vo["dwPrices"] = BytesUtil.read("dwPrices",bytes,BytesType.INT,BytesType.INT_LENGTH);
			vo["btType"] = BytesUtil.read("btType",bytes,BytesType.BYTE,BytesType.BYTE_LENGTH);
			vo["btRecommend"] = BytesUtil.read("btRecommend",bytes,BytesType.BYTE,BytesType.BYTE_LENGTH);
			vo["btCostType"] = BytesUtil.read("btCostType",bytes,BytesType.BYTE,BytesType.BYTE_LENGTH);
			vo["dwReturnJiFen"] = BytesUtil.read("dwReturnJiFen",bytes,BytesType.INT,BytesType.INT_LENGTH);
			vo["szRecommend"] = BytesUtil.read("szRecommend",bytes,BytesType.CHAR,256);
			return vo;
		}
		
		/**
		 * 商城分类
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function stMallConfigDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["dwMallid"] = BytesUtil.read("dwMallid",bytes,BytesType.INT,BytesType.INT_LENGTH);
			vo["szNotice"] = BytesUtil.read("szNotice",bytes,BytesType.CHAR,255);
			return vo;
		}
		/** 
		 *队伍信息 
		 * @param bytes 
		 * @return  
		 *  
		 */              
		public static function teamInfoDecode(bytes:ByteArray):Object 
		{ 
			var vo:Object = {}; 
			vo["szGroupName"]       = BytesUtil.read("szGroupName", bytes, BytesType.CHAR, 48 ); 
			vo["szGroupMaster"]     = BytesUtil.read("szGroupMaster", bytes, BytesType.CHAR, 48 ); 
			vo["szGroupDiscribe"]   = BytesUtil.read("szGroupDiscribe", bytes, BytesType.CHAR, 100 ); 
			vo["wMaze"]              = BytesUtil.read("wMaze",bytes,BytesType.SHORT,BytesType.SHORT_LENGTH ); 
			vo["btCount"]            = BytesUtil.read("btCount",bytes,BytesType.BYTE,BytesType.BYTE_LENGTH ); 
			vo["condition"]          = BytesUtil.readVO("stGroupCondition",bytes,teamNeedDecode); 
			return vo; 
		}

		/**
		 * 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function queryGroupInfoDecode(bytes:ByteArray):Object
		{
			var vo:Object = {}; 
			vo["szName"]       = BytesUtil.read("szName", bytes, BytesType.CHAR, 48 ); 
			vo["btState"]      = BytesUtil.read("btState", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH ); 
			vo["dwLevel"]      = BytesUtil.read("dwLevel", bytes, BytesType.INT, BytesType.INT_LENGTH ); 
			vo["szMapName"]    = BytesUtil.read("wMaze",bytes,BytesType.CHAR, 48 ); 
			return vo; 
		}
		/** 
		 *队伍需求  
		 * @param bytes 
		 * @return  
		 *  
		 */              
		public static function teamNeedDecode(bytes:ByteArray):Object 
		{ 
			var vo:Object = {}; 
			vo["dwMinJoinLevel"]   = BytesUtil.read("dwMinJoinLevel", bytes, BytesType.INT, BytesType.INT_LENGTH); 
			vo["dwMaxJoinLevel"]   = BytesUtil.read("dwMaxJoinLevel", bytes, BytesType.INT, BytesType.INT_LENGTH); 
			vo["boAutoAllow"]       = BytesUtil.read("boAutoAllow", bytes, BytesType.BOOL, BytesType.BOOL_LENGTH); 
			return vo; 
		} 
		/** 
		 *地图队伍列表  
		 * @param bytes 
		 * @return  
		 *  
		 */              
		public static function teamMapListDecode(bytes:ByteArray):Object 
		{ 
			var vo:Object = {}; 
			vo["dwMasterLevel"]  = BytesUtil.read("dwMasterLevel",bytes,BytesType.INT,BytesType.INT_LENGTH ); 
			vo["dwGroupId"]      = BytesUtil.read("dwGroupId",bytes,BytesType.INT,BytesType.INT_LENGTH ); 
			vo["condition"]      = BytesUtil.readVO("stGroupInfo",bytes,teamInfoDecode ); 
			return vo; 
		} 
		/** 
		 *队伍成员
		 * @param bytes 
		 * @return  
		 *  
		 */              
		public static function teamMembersDecode(bytes:ByteArray):Object 
		{ 
			var vo:Object = {}; 
			vo["szName"]      = BytesUtil.read("szName", bytes, BytesType.CHAR, 48 ); 
			vo["btLeftType"] = BytesUtil.read("btLeftType", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH );
			vo["dwOnlyID"] = BytesUtil.read("dwOnlyID", bytes, BytesType.INT, BytesType.INT_LENGTH ); 
			return vo; 
			
		} 
		
		public static function stToClientItemAndCountDecode(bytes:ByteArray):Object
		{
			var vo:Object = {}; 
			vo["szItemName"]      = BytesUtil.read("szItemName", bytes, BytesType.CHAR, 24 ); 
			vo["nCount"] = BytesUtil.read("nCount", bytes, BytesType.INT, BytesType.INT_LENGTH );
			return vo; 
			
		}
		
		/**
		 *氏族基础 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function stToClientClanBaseInfoDecode(bytes:ByteArray):Object
		{
			var vo:Object = {}; 
			vo["stClanDB"]  =  BytesUtil.readVO("stClanDB", bytes, stClanDBDecoder);
			vo["szMasterName"] = BytesUtil.read("szMasterName", bytes, BytesType.CHAR, 48);
			vo["nMemberCount"] = BytesUtil.read("nMemberCount", bytes, BytesType.INT, BytesType.INT_LENGTH);
			vo["btBoHou"] = BytesUtil.read("btBoHou", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH);
			return vo; 
			
		}
		
		
		
		
		
		/**
		 * 氏族信息 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function stClanDBDecoder(bytes:ByteArray):Object
		{
			var vo:Object = {}; 
			vo["dwID"]      = BytesUtil.read("dwID", bytes, BytesType.INT, 4 ); 
			vo["szName"]      = BytesUtil.read("szName", bytes, BytesType.CHAR, 12 ); 
			vo["dwLevel"]      = BytesUtil.read("dwLevel", bytes, BytesType.INT, 4 ); 
			vo["szNotice"]      = BytesUtil.read("szNotice", bytes, BytesType.CHAR, 100 ); 
			vo["szSubName"]      = BytesUtil.read("szSubName", bytes, BytesType.CHAR, 65 ); 
			vo["szSubTitle"]      = BytesUtil.read("szSubTitle", bytes, BytesType.CHAR, 105); 
			vo["szWeekMsg"]      = BytesUtil.read("szWeekMsg", bytes, BytesType.CHAR, 357 ); 
			vo["i64ClanGold"]      = BytesUtil.read("i64ClanGold", bytes, BytesType.INT64_NUMBER, BytesType.INT64_NUMBER_LENGTH); 
			vo["i64ClanItem"]      = BytesUtil.read("i64ClanItem", bytes, BytesType.INT64, 8 ); 
			vo["i64ClanQuestCount"]      = BytesUtil.read("i64ClanQuestCount", bytes, BytesType.INT64, 8 ); 
			vo["dwNowTop"]      = BytesUtil.read("dwNowTop", bytes, BytesType.INT, 4 ); 
			vo["dwBeforeTop"]      = BytesUtil.read("dwBeforeTop", bytes, BytesType.INT, 4 ); 
			vo["szCreatTime"]      = BytesUtil.read("szCreatTime", bytes, BytesType.CHAR, 11 ); 
			vo["dwPrincesID"]      = BytesUtil.read("dwPrincesID", bytes, BytesType.INT,4 ); 
			vo["btCountryId"]      = BytesUtil.read("btCountryId", bytes, BytesType.BYTE, 1 );
			return vo
		}
		
		/**
		 * 氏族个人信息 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function stClanSelfMemberDecoder(bytes:ByteArray):Object
		{
			var vo:Object = {}; 
			vo["szName"] = BytesUtil.read("szName",bytes,BytesType.CHAR,48);
			vo["szAliaName"]= BytesUtil.read("szAliaName",bytes,BytesType.CHAR,12);
			vo["dwClanId"]= BytesUtil.read("dwClanId",bytes,BytesType.INT,4);
			vo["btClanPower"]= BytesUtil.read("btClanPower",bytes,BytesType.BYTE,1);
			vo["btClanSub"]= BytesUtil.read("btClanSub",bytes,BytesType.BYTE,1);
			vo["tInTime"]= BytesUtil.read("tInTime",bytes,BytesType.CHAR,11);
			vo["dwPrincesId"]= BytesUtil.read("dwPrincesId",bytes,BytesType.INT,4);
			vo["btPrincesPower"]= BytesUtil.read("btPrincesPower",bytes,BytesType.BYTE,1);
			vo["tLoginOutTime"]= BytesUtil.read("tLoginOutTime",bytes,BytesType.CHAR,11);
			vo["boonline"]= BytesUtil.read("boonline",bytes,BytesType.BYTE,1);
			vo["btSex"]= BytesUtil.read("btSex",bytes,BytesType.BYTE,1);
			vo["dwLevel"]= BytesUtil.read("dwLevel",bytes,BytesType.INT,4);
			vo["dwFram"]= BytesUtil.read("dwFram",bytes,BytesType.INT,4);
			vo["boKing"]= BytesUtil.read("boKing",bytes,BytesType.BOOL,1);
			return vo
		}
		
		/**
		 * 氏族成员信息 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function stClanMemberDecoder(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["szName"] = BytesUtil.read("szName",bytes,BytesType.CHAR,48);
			vo["szAliaName"] = BytesUtil.read("szAliaName",bytes,BytesType.CHAR,12);
			vo["dwClanId"] = BytesUtil.read("dwClanId",bytes,BytesType.INT,4);
			vo["btClanPower"] = BytesUtil.read("btClanPower",bytes,BytesType.BYTE,1);
			vo["btClanSub"] = BytesUtil.read("btClanSub",bytes,BytesType.BYTE,1);
			vo["tInTime"] = BytesUtil.read("tInTime",bytes,BytesType.CHAR,11);
			vo["dwPrincesId"] = BytesUtil.read("dwPrincesId",bytes,BytesType.INT,4);
			vo["btPrincesPower"] = BytesUtil.read("btPrincesPower",bytes,BytesType.BYTE,1);
			vo["tLoginOutTime"] = BytesUtil.read("tLoginOutTime",bytes,BytesType.CHAR,11);
			vo["boonline"] = BytesUtil.read("boonline",bytes,BytesType.BYTE,1);
			vo["btSex"] = BytesUtil.read("btSex",bytes,BytesType.BYTE,1);
			vo["dwLevel"] = BytesUtil.read("dwLevel",bytes,BytesType.INT,4);
			vo["dwFram"] = BytesUtil.read("dwFram",bytes,BytesType.INT,4);
			vo["boKing"] = BytesUtil.read("boKing",bytes,BytesType.BOOL,1);
			return vo;
		}
		
		/**
		 * 氏族申请成员列表 
		 * @param bytes
		 * 
		 */		
		public static function stInviteMsgDecoder(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["szRecommendName"] = BytesUtil.read("szRecommendName",bytes,BytesType.CHAR,48);
			vo["dwLevel"] = BytesUtil.read("dwLevel",bytes,BytesType.INT,4);
			vo["btSex"] = BytesUtil.read("btSex",bytes,BytesType.BYTE,1);
			vo["dwHour"] = BytesUtil.read("dwHour",bytes,BytesType.INT,BytesType.INT_LENGTH);
			vo["szInviteName"] = BytesUtil.read("szInviteName",bytes,BytesType.CHAR,48);
			vo["szApplyMsg"] = BytesUtil.read("szApplyMsg",bytes,BytesType.CHAR,100);
			return vo;
		}
		
		/**
		 * 单个氏族信息 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function stClanMsgDecoder(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["nID"] = BytesUtil.read("nID",bytes,BytesType.INT,BytesType.INT_LENGTH);
			vo["szName"] = BytesUtil.read("szName",bytes,BytesType.CHAR,12);
			vo["szMasterName"] = BytesUtil.read("szMasterName",bytes,BytesType.CHAR,48);
			vo["nLevel"] = BytesUtil.read("nLevel",bytes,BytesType.INT,BytesType.INT_LENGTH);
			vo["nMaxCount"] = BytesUtil.read("nMaxCount",bytes,BytesType.INT,BytesType.INT_LENGTH);
			vo["nNowCount"] = BytesUtil.read("nNowCount",bytes,BytesType.INT,BytesType.INT_LENGTH);
			vo["szCreateTime"] = BytesUtil.read("szCreateTime",bytes,BytesType.CHAR,11);
			return vo;
		}

		public static function formationsDecode(bytes:ByteArray):Object
		{
			var vo:Object = {}; 
			vo["nFormationID"]              = BytesUtil.read("nFormationID", bytes, BytesType.INT, BytesType.INT_LENGTH );
			vo["szFormationName"]           = BytesUtil.read("szFormationName", bytes, BytesType.CHAR, 48 ); 
			vo["nFormationType"]            = BytesUtil.read("nFormationType", bytes, BytesType.INT, BytesType.INT_LENGTH );
			vo["nFormationLeaderEffectID"] = BytesUtil.read("nFormationLeaderEffectID", bytes, BytesType.INT, BytesType.INT_LENGTH );
			vo["nFormationMemberEffectID"] = BytesUtil.read("nFormationMemberEffectID", bytes, BytesType.INT, BytesType.INT_LENGTH );
			vo["nFormationOpen"]            = BytesUtil.read("nFormationOpen", bytes, BytesType.INT, BytesType.INT_LENGTH );
			vo["nFormationLevel"]           = BytesUtil.read("nFormationLevel", bytes, BytesType.INT, BytesType.INT_LENGTH );
			return vo; 
		}
		
		public static function playerTitleDecode(bytes:ByteArray):Object
		{
			var vo:Object = {}; 
			vo["nPlayerTitleID"]            = BytesUtil.read("nPlayerTitleID", bytes, BytesType.INT, BytesType.INT_LENGTH );
			vo["szPlayerTitleName"]        = BytesUtil.read("szPlayerTitleName", bytes, BytesType.CHAR, 48 ); 
			vo["btPlayerTitleType"]        = BytesUtil.read("btPlayerTitleType", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH );
			vo["dwPlayerTitleTime"]        = BytesUtil.read("dwPlayerTitleTime", bytes, BytesType.INT, BytesType.INT_LENGTH );
			vo["boUsed"]                     = BytesUtil.read("boUsed", bytes, BytesType.BOOL, BytesType.BOOL_LENGTH );
			return vo; 
		}
		
		public static function stQuestInfoDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["dwID"] = 				BytesUtil.read("dwID", bytes, BytesType.INT, BytesType.INT_LENGTH ); 
			vo["byQuestStatus"] = 	BytesUtil.read("byQuestStatus", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH ); 

			vo["byQuestType"] = 	BytesUtil.read("byQuestType", bytes,  BytesType.BYTE, BytesType.BYTE_LENGTH);  
			vo["byQuestSubType"] =  BytesUtil.read("byQuestSubType", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH );  
			vo["dwMinLevel"] = 		BytesUtil.read("dwMinLevel", bytes, BytesType.INT, BytesType.INT_LENGTH ); 
			vo["byAwardLevel"] = 		BytesUtil.read("byAwardLevel", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH); 
			vo["byDifficult"] = 		BytesUtil.read("byDifficult", bytes,  BytesType.BYTE, BytesType.BYTE_LENGTH ); 
			vo["dwTimeLimit"] = 		BytesUtil.read("dwTimeLimit", bytes, BytesType.INT, BytesType.INT_LENGTH ); 
			vo["dwBeginNpcID"] = 	BytesUtil.read("dwBeginNpcID", bytes, BytesType.INT, BytesType.INT_LENGTH ); 
			vo["dwEndNpcID"] = 		BytesUtil.read("dwEndNpcID", bytes, BytesType.INT, BytesType.INT_LENGTH ); 
			vo["szQuestName"] = 		BytesUtil.read("szQuestName", bytes, BytesType.CHAR, 48 ); 
			vo["szDescribe"] = 			BytesUtil.read("szDescribe", bytes, BytesType.CHAR, 256 ); 
			vo["szBeginDesc"] = 		BytesUtil.read("szBeginDesc", bytes, BytesType.CHAR, 256 ); 
			vo["szTargetDesc"] =		BytesUtil.read("szTargetDesc", bytes, BytesType.CHAR, 256 ); 
			vo["szJiangLi"] = 		BytesUtil.read("szJiangLi", bytes, BytesType.CHAR, 256 ); 
			vo["byItemSelect"] = 		BytesUtil.read("byItemSelect", bytes,  BytesType.BYTE, BytesType.BYTE_LENGTH ); 
			vo["byQuestTargetType"] = 		BytesUtil.read("byQuestTargetType", bytes,  BytesType.BYTE, BytesType.BYTE_LENGTH ); 
			vo["nMapCheck"] = 		BytesUtil.read("nMapCheck", bytes, BytesType.INT, BytesType.INT_LENGTH  ); 
			vo["nMapPosX"] = 		BytesUtil.read("nMapPosX", bytes, BytesType.INT, BytesType.INT_LENGTH ); 
			vo["nMapPosY"] = 		BytesUtil.read("nMapPosY", bytes, BytesType.INT, BytesType.INT_LENGTH  ); 
			
			vo["stgCondition"] = 	BytesUtil.readVO("stgCondition", bytes, taskCondition ); 
			return vo;
		}
		
		/** 
		 *任务条件 
		 * @param bytes 
		 * @return  
		 *  
		 */              
		public static function taskCondition(bytes:ByteArray):Object 
		{ 
			var ary:Array = [];
			for(var i:int=0;i<8;i++)
			{
				var vo:Object = {}; 
				vo["nID"]   = BytesUtil.read("nID", bytes, BytesType.INT, BytesType.INT_LENGTH); 
				vo["nCount"]   = BytesUtil.read("nCount", bytes, BytesType.INT, BytesType.INT_LENGTH); 
				vo["nValue"]   = BytesUtil.read("nValue", bytes, BytesType.INT, BytesType.INT_LENGTH); 
				ary[i] = vo;
			}
			return ary; 
		} 
		
		/** 
		 *任务条件,单个 
		 * @param bytes 
		 * @return  
		 *  
		 */              
		public static function taskSingleCondition(bytes:ByteArray):Object 
		{ 
			var vo:Object = {}; 
			vo["nID"]   = BytesUtil.read("nID", bytes, BytesType.INT, BytesType.INT_LENGTH); 
			vo["nCount"]   = BytesUtil.read("nCount", bytes, BytesType.INT, BytesType.INT_LENGTH); 
			vo["nValue"]   = BytesUtil.read("nValue", bytes, BytesType.INT, BytesType.INT_LENGTH); 
			return vo; 
		} 
		/**
		 *组队查询 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function groupDecode(bytes:ByteArray):Object 
		{ 
			var vo:Object = {}; 
			vo["szName"]   = BytesUtil.read("szName", bytes, BytesType.CHAR, 48); 
			vo["dwLevel"]   = BytesUtil.read("dwLevel", bytes, BytesType.INT, BytesType.INT_LENGTH); 
			vo["btJobID"]   = BytesUtil.read("btJobID", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH); 
			vo["btMemberCount"]   = BytesUtil.read("btMemberCount", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH); 
			vo["dwTmpId"]   = BytesUtil.read("dwTmpId", bytes, BytesType.INT, BytesType.INT_LENGTH); 
			vo["dwOnlyId"]   = BytesUtil.read("dwOnlyId", bytes, BytesType.INT, BytesType.INT_LENGTH); 
			return vo; 
		}
		/**
		 *邮件列表 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function MailSummariesDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["dwMailId"]   = BytesUtil.read("dwMailId", bytes, BytesType.INT, BytesType.INT_LENGTH); 
			vo["szSenderName"]   = BytesUtil.read("szSenderName", bytes, BytesType.CHAR, 48); 
			vo["szTitle"]   = BytesUtil.read("szTitle", bytes, BytesType.CHAR, 48); 
			vo["boRead"]   = BytesUtil.read("boRead", bytes, BytesType.BOOL, BytesType.BOOL_LENGTH); 
			vo["boAccessory"]   = BytesUtil.read("boAccessory", bytes, BytesType.BOOL, BytesType.BOOL_LENGTH); 
			vo["tSendTime"]   = BytesUtil.read("tSendTime", bytes, BytesType.INT, BytesType.INT_LENGTH); 
			vo["boSystem"]   = BytesUtil.read("boSystem", bytes, BytesType.BOOL, BytesType.BOOL_LENGTH); 
			return vo;
		}
		/**
		 *邮件 
		 * @param bytes
		 * @return 
		 * 
		 */		
		public static function MailDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["dwMailId"]   = BytesUtil.read("dwMailId", bytes, BytesType.INT, BytesType.INT_LENGTH); 
			vo["szSenderName"]   = BytesUtil.read("szSenderName", bytes, BytesType.CHAR,48); 
			vo["szReceiverName"]   = BytesUtil.read("szReceiverName", bytes, BytesType.CHAR,48); 
			vo["tSendTime"]   = BytesUtil.read("tSendTime", bytes, BytesType.INT,BytesType.INT_LENGTH); 
			vo["szTitle"]   = BytesUtil.read("szTitle", bytes, BytesType.CHAR,64); 
			vo["szNotice"]   = BytesUtil.read("szNotice", bytes, BytesType.CHAR,512); 
			vo["boRead"]   = BytesUtil.read("boRead", bytes, BytesType.BOOL,BytesType.BOOL_LENGTH); 
			vo["dwGold"]   = BytesUtil.read("dwGold", bytes, BytesType.INT,BytesType.INT_LENGTH); 
			vo["dwZhuGold"]   = BytesUtil.read("dwZhuGold", bytes, BytesType.INT,BytesType.INT_LENGTH);
			vo["items"]   = BytesUtil.readVO("items", bytes,BytesDeocdeVOUtils.itemsDecode);
			vo["boReveivedItem"]   = BytesUtil.read("boReveivedItem", bytes, BytesType.BOOL,BytesType.BOOL_LENGTH);
			vo["boSystem"]   = BytesUtil.read("boSystem", bytes, BytesType.BOOL,BytesType.BOOL_LENGTH);
			return vo;
		}
		
		public static function stSimplePlayerJobHeartDecode(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["wJobHeartID"]     =    	BytesUtil.read("wJobHeartID", bytes, BytesType.SHORT, BytesType.SHORT_LENGTH ); 
			vo["wJobHeartLevel"] = 		BytesUtil.read("wJobHeartLevel", bytes, BytesType.SHORT, BytesType.SHORT_LENGTH );  
			return vo;
		}
		
		public static function stClanSkillBackDecoder(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["dwSkillId"]     =    	BytesUtil.read("dwSkillId", bytes, BytesType.INT, BytesType.INT_LENGTH );
			vo["btLevel"]     =    	BytesUtil.read("btLevel", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH );
			vo["dwResearchNum"]     =    	BytesUtil.read("dwResearchNum", bytes, BytesType.INT, BytesType.INT_LENGTH );
			vo["dwResearchNumMax"]     =    	BytesUtil.read("dwResearchNumMax", bytes, BytesType.INT, BytesType.INT_LENGTH );
			vo["boIsResearching"]     =    	BytesUtil.read("boIsResearching", bytes, BytesType.BOOL, BytesType.BOOL_LENGTH );
			return vo;
		}
		
		public static function initClanSkillBackDecoder(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["nID"]     =    	BytesUtil.read("nID", bytes, BytesType.INT, BytesType.INT_LENGTH );
			vo["nLevel"]     =    	BytesUtil.read("nLevel", bytes, BytesType.INT, BytesType.INT_LENGTH );
			vo["nNum"]     =    	BytesUtil.read("nNum", bytes, BytesType.INT, BytesType.INT_LENGTH );
			vo["btIsLearn"]     =    	BytesUtil.read("btIsLearn", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH );
			vo["biIsActivation"]     =    	BytesUtil.read("biIsActivation", bytes, BytesType.BYTE, BytesType.BYTE_LENGTH );
			return vo;
		}
		
		public static function stGroupFirendBackDecoder(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["dwOnly"]     =    	BytesUtil.read("dwOnly", bytes, BytesType.INT, BytesType.INT_LENGTH );
			vo["szName"]     =    	BytesUtil.read("nLevel", bytes, BytesType.CHAR, 48 );
			return vo;
		}
		
		public static function stLifeSkillDecoder(bytes:ByteArray):Object
		{
			var vo:Object = {};
			vo["dwSkillId"] = BytesUtil.read("dwSkillId",bytes,BytesType.INT,BytesType.INT_LENGTH);
			vo["btLevel"] = BytesUtil.read("btLevel",bytes,BytesType.BYTE,BytesType.BYTE_LENGTH);
			vo["dwResearchNum"] = BytesUtil.read("dwResearchNum",bytes,BytesType.INT,BytesType.INT_LENGTH);
			vo["dwResearchNumMax"] = BytesUtil.read("dwResearchNumMax",bytes,BytesType.INT,BytesType.INT_LENGTH);
			vo["boIsResearching"] = BytesUtil.read("boIsResearching",bytes,BytesType.BOOL,BytesType.BOOL_LENGTH);
			return vo;
		}
	}
}



